﻿using AlgoritmoConstrutivo.entidades;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace AlgoritmoConstrutivo.particionamento
{
    class Particionador
    {
    //    private Cluster cluster;

    //    public void ConfigurarClusters(Grafo f)
    //    {
    //        Vizinhos modulos = f.Nos;

    //        int divisor = modulos.Count;
    //        int numTotalModulos = divisor;

    //        while (divisor != 0)
    //        {
    //            this.InitiliazeCluster(f);

    //            for (int i = 0; i < modulos.Count; i++)
    //            {

    //                if (numTotalModulos == 0)
    //                {
    //                    this.GenerateCluster(f);
    //                    numTotalModulos = divisor;
    //                }
  
    //                modulos[i].Cluster = this.ActualCluster();
    //                --numTotalModulos;
    //            }

    //            divisor/=2;
    //            numTotalModulos = divisor;

    //            this.CalculaMQ(f);

    //            Console.WriteLine(f + Environment.NewLine);
            
    //        }
           
    //    }

    //    public void CalculaMQ(Grafo f)
    //    {
           
    //        for (int k = 0; k < f.Nos.Count; k++)
    //        {
    //            for (int w = 0; w < f.Nos[k].Vizinhos.Count; w++)
    //            {

    //                int idVizinhoListaAdj = f.Nos[k].Vizinhos[w].Id;

    //                if (f.Nos[k].Cluster.Id != (f.Nos[--idVizinhoListaAdj].Cluster.Id)) // eh uma aresta externa comecando em um cluster e indo para outro
    //                {

    //                    f.Clusters[f.Nos[k].Cluster.Id].Externas += 1;
    //                }
    //                else
    //                {
    //                    f.Clusters[f.Nos[k].Cluster.Id].Internas += 1;
    //                }
    //            }
    //        }

    //        for (int i = 0; i < f.Clusters.Count; i++)
    //        {
    //        //    f.Clusters[i].CalculaMF();
    //        }

    //        f.CalculaMQ();
    //    }


    //    public void InitiliazeCluster(Grafo f)
    //    {
    //        //this.cluster = new Cluster(0);
    //        //f.ClustersComMq = new List<Cluster>();
    //        //f.ClustersComMq.Add(this.cluster);
    //    }

    //    public Cluster GenerateCluster(Grafo f)
    //    {
    //        //int novoId = this.cluster.Id;
    //        //this.cluster = new Cluster(++novoId) ; //gera um id novo para o cluster.

    //        //f.ClustersComMq.Add(this.cluster);
    //        //return (this.cluster);

    //        return null;
    //    }

    //    public Cluster ActualCluster()
    //    {
    //        return (this.cluster);
    //    }
    }
}
